public class Matrix {
    public static void print(int[ ][ ] m){
        for(int i = 0; i<m.length; i++){
            System.out.print("| ");
            for(int j=0;j<m[i].length;j++){
                System.out.printf("%-6d",m[i][j]);
            }
            System.out.println("|");
        }
    }  // 输出格式自行决定，但一定要整齐美观
    public static void print(double[ ][ ] m){
        for(int i = 0; i<m.length; i++){
            System.out.print("| ");
            for(int j=0;j<m[i].length;j++){
                System.out.printf("%-8.3f",m[i][j]);
            }
            System.out.println("|");
        }
    }
    public static boolean haveSameDimension(int[ ][ ] m1, int[ ][ ] m2){
        if(m1.length==m2.length){
            for(int i=0;i<m1.length;i++){
                if(m1[i].length!=m2[i].length){
                    return false;
                }
            }
            return true;
        }
        else {
            return false;
        }
    }
    public static boolean haveSameDimension(double[ ][ ] m1, double[ ][ ] m2){
        if(m1.length==m2.length){
            for(int i=0;i<m1.length;i++){
                if(m1[i].length!=m2[i].length){
                    return false;
                }
            }
            return true;
        }
        else {
            return false;
        }
    }
    public static int[ ][ ] add(int[ ][ ] m1, int[ ][ ] m2){
        if(haveSameDimension(m1,m2)){
            int[][] temp=new int [m1.length][m1[0].length];
            for(int i=0;i<m1.length;i++){
                for(int j=0;j<m1[i].length;j++){
                    temp[i][j]=m1[i][j]+m2[i][j];
                }
            }
            return temp;
        }
        else {
            System.out.println("两个矩阵维数不同，无法相加");
            return new int[0][0];
        }
    }
    //矩阵相加运算之前，要检查矩阵的维数是否一致，请使用已定义好的方法，尽量要复用。
    public static double[ ][ ] add(double[ ][ ] m1, double[ ][ ] m2){
        if(haveSameDimension(m1,m2)){
            double[][] temp=new double [m1.length][m1[0].length];
            for(int i=0;i<m1.length;i++){
                for(int j=0;j<m1[i].length;j++){
                    temp[i][j]=m1[i][j]+m2[i][j];
                }
            }
            return temp;
        }
        else {
            System.out.println("两个矩阵维数不同，无法相加");
            return new double[0][0];
        }
    }
    public static int[ ][ ] subtract(int[ ][ ] m1, int[ ][ ] m2){
        if(haveSameDimension(m1,m2)){
            int[][] temp=new int [m1.length][m1[0].length];
            for(int i=0;i<m1.length;i++){
                for(int j=0;j<m1[i].length;j++){
                    temp[i][j]=m1[i][j]-m2[i][j];
                }
            }
            return temp;
        }
        else {
            System.out.println("两个矩阵维数不同，无法相减");
            return new int[0][0];
        }
    }
    public static double[ ][ ] subtract(double[ ][ ] m1, double[ ][ ] m2){
        if(haveSameDimension(m1,m2)){
            double[][] temp=new double [m1.length][m1[0].length];
            for(int i=0;i<m1.length;i++){
                for(int j=0;j<m1[i].length;j++){
                    temp[i][j]=m1[i][j]-m2[i][j];
                }
            }
            return temp;
        }
        else {
            System.out.println("两个矩阵维数不同，无法相减");
            return new double[0][0];
        }
    }
    public static int[ ][ ] multiply(int[ ][ ] m1, int[ ][ ] m2){
        for(int i=0;i< m1.length;i++){
            if(m1[i].length!=m2.length){
                System.out.println("矩阵输入可能有误，请检查");
                return new int[0][0];
            }
        }
        int[][] temp=new int[m1.length][m2[0].length];
        int sum=0;
        for(int a=0;a<m1.length;a++){//m1的某一行
            for(int b=0;b<m2[a].length;b++){//m2的某一列
                for(int c=0;c<m1[a].length;c++){
                    sum=sum+m1[a][c]*m2[c][b];
                }
                temp[a][b]=sum;
                sum=0;
            }
        }
        return temp;
    }
    public static double[ ][ ] multiply(double[ ][ ] m1, double[ ][ ] m2){
        for(int i=0;i< m1.length;i++){
            if(m1[i].length!=m2.length){
                System.out.println("矩阵输入可能有误，请检查");
                return new double[0][0];
            }
        }
        double[][] temp=new double[m1.length][m2[0].length];
        double sum=0;
        for(int a=0;a<m1.length;a++){//m1的某一行
            for(int b=0;b<m2[a].length;b++){//m2的某一列
                for(int c=0;c<m1[a].length;c++){
                    sum=sum+m1[a][c]*m2[c][b];
                }
                temp[a][b]=sum;
                sum=0;
            }
        }
        return temp;
    }
}
